package study

import (
	"fmt"
)

// 该程序会计算一个数中每一位的平方和与立方和，然后把平方和与立方和相加并打印出来
// 例如，如果输出是 123，该程序会如下计算输出：
// squares = (1 * 1) + (2 * 2) + (3 * 3)
// cubes = (1 * 1 * 1) + (2 * 2 * 2) + (3 * 3 * 3)
// output = squares + cubes = 50

//计算平方和立方共同的拆每个数（把一个数拆分成一个个数）
func digits(num int, nch chan int) {
	fmt.Print("0") //可以去掉
	for num != 0 {
		digit := num % 10
		nch <- digit
		num /= 10
	}
	close(nch) //记得关闭
}

//一个数的每个数的平方
func calcSquares(num int, res chan int) {
	sum := 0
	ch := make(chan int)
	go digits(num, ch)
	for digit := range ch {
		sum += digit * digit
	}
	res <- sum
}

//一个数的每个数的立方
func calcCubes(num int, res chan int) {
	sum := 0
	ch := make(chan int)
	go digits(num, ch)
	for digit := range ch {
		sum += digit * digit * digit
	}
	res <- sum
}
